package cn.xiaolang.function.data_structure;

/**
 * 一次编辑
 * 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑。
 * 示例 1:
 * 输入:
 * first = "pale"
 * second = "ple"
 * 输出: True
 *  
 * 示例 2:
 * 输入:
 * first = "pales"
 * second = "pal"
 * 输出: False
 * <p>
 *
 * @author fuhw/Dean
 * @date 2020-06-09
 */
public class No4OneEditAway {

    public static void main(String[] args) {
        System.out.println(oneEditAway("islander", "slander"));
    }

    /**
     * 思路：
     * 1 差一个字符串   A="leetcode" B="leetode" 我们发现 'c' 和 'o' 不相同，然后比较 'ode' 和 'ode' 是否相同
     * 2 一个字符不同   A="leetcode" B="leetkode" 那么我们需要找到 'c' 和 'k'，然后比较 'ode' 和 'ode' 是否相同
     */
    public static boolean oneEditAway(String first, String second) {
        if (Math.abs(first.length() - second.length()) > 1) {
            return false;
        }
        // first 为短字符串 second为长字符串
        if (first.length() > second.length()) {
            String temp = first;
            first = second;
            second = temp;
        }

        for (int i = 0; i < first.length(); i++) {

            if (first.charAt(i) != second.charAt(i)) {
                return first.length() == second.length()
                        ? first.substring(i + 1).equals(second.substring(i + 1))
                        : first.substring(i).equals(second.substring(i + 1));
            }
        }
        return true;
    }
}


